{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4f772fb7",
   "metadata": {},
   "source": [
    "## Задание 1 (7 баллов)\n",
    "\n",
    "Одна партия составляет `n` деталей. При производстве деталей они последовательно выставляются на конвейер и двигаются вправо. В конце конвейера, по ходу движения, детали снимаются при помощи специального захвата. Механизм захвата рассчитан ровно на три детали. Меньшее или большее количество деталей захват не способен удержать. Оставшиеся детали должны снимать техники с конвейера, который остановлен. Техник способен поднять и перенести только одну деталь. Для этого техникам нужно идти через весь цех, аккуратно и внимательно обходя другие станки и механизмы. Из точки дислокации техников не видно сколько деталей осталось на конвейере.\n",
    "\n",
    "Напишите функцию `func()`, которая будет принимать на вход число `n` - количество деталей в производимой партии, и возвращать количество техников, которое необходимо для освобождения конвейера.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "func(242749)\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "1\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "0594b243",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "d90702b3d9bbbcdc99e3034431b9464e",
     "grade": false,
     "grade_id": "cell-31fecc38f84a8a4e",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def func(number):\n",
    "    rez = number%3\n",
    "    return rez"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "e29bb584",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "50feaea27aa04f45826031636bbb5179",
     "grade": true,
     "grade_id": "cell-ddad7a849bccfb99",
     "locked": true,
     "points": 7,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, техники вас сердечно благодарят!\n"
     ]
    }
   ],
   "source": [
    "assert func(1) == 1\n",
    "assert func(122) == 2\n",
    "assert func(242748) == 0\n",
    "print('Задача решена, техники вас сердечно благодарят!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fbbb5a3",
   "metadata": {},
   "source": [
    "## Задание 2 (8 баллов)\n",
    "\n",
    "Техники из предыдущей задачи где-то раздобыли датчик, который проверяет есть ли детали на конвейере. Датчик цифровой, но вся документация для него написана на языке, который не понимает ни один из техников. Показывать датчик технологу техники не хотят по личным соображениям. После нескольких дней кропотливой работы с приемом препаратов, улучающих интеллектуальную деятельность датчик удалось приладить к панели HMI. При настройке индикатора, который, по замыслу техников, должен сигнализировать нужно ли бежать к конвейеру для разгрузки, выяснилось что если конвейер пуст, то датчик выдает пустую строку, а если на конвейере есть детали, то - какой-то набор символов (возможно техники как-то неправильно настроили выход датчика, но это не важно). Индикатор на HMI принимает два варианта:\n",
    "\n",
    "* `NULL` - зеленая индикация, конвейер пуст, и техники могут продолжить оптимизацию деятельности.\n",
    "* `NOT NULL` - красная индикация, на конвейере есть детали, размышления придется прервать и идти к конвейеру для разгрузки.\n",
    "\n",
    "Реализуйте для техников функцию `is_null()`, которая получает любую строку и возвращает \"NULL\", если в строке нет ни одного символа и \"NOT NULL\" в противном случае.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "is_null('NULL')\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "'NOT NULL'\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "4847686c",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "f8dadc2d139d927476792cf7545144b8",
     "grade": false,
     "grade_id": "cell-124940ee04bb09c1",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def is_null(string):\n",
    "    if string:\n",
    "        return \"NOT NULL\"\n",
    "    return \"NULL\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "f639dffe",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "57cde7543d12569801e430fd9c1b3ed6",
     "grade": true,
     "grade_id": "cell-a485725ee03841e8",
     "locked": true,
     "points": 8,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, техники вас сердечно благодарят!\n"
     ]
    }
   ],
   "source": [
    "assert is_null('') == 'NULL'\n",
    "assert is_null('NULL') == 'NOT NULL'\n",
    "assert is_null('NOT NULL') == 'NOT NULL'\n",
    "print('Задача решена, техники вас сердечно благодарят!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2139f9f9",
   "metadata": {},
   "source": [
    "## Задание 3 (8 баллов)\n",
    "\n",
    "При установке датчика из предыдущей задачи техники совершенно случайно задели ролик конвейера и погнули его. Пытаясь аккуратно его поправить техникам удалось разбалансировать направляющий вал. Чтобы не тревожить технолога по таким пустякам техники придумали оригинальное решение. Техники сдвигают ленту конвейера влево и ставят засечку с минусом и количеством миллиметров сдвига, либо сдвигают ленту конвейера справо ставят засечку с плюсом и количеством миллиметров сдвига. Через несколько оборотов лента съезжает либо влево, либо вправо. После череды экспериментов выяснилось что можно вычислить насколько съедет лента. Для этого нужно сдвиг каждого оборота домножать на произведение предыдущих оборотов. Каждый оборот лента сдвигается на один миллиметр вправо.\n",
    "\n",
    "Реализуйте для техников функцию `multiplier()`. Эта функция принимает значение первой засечки `N1` и значение последней засечки `N2`. Очевидно, что `N2` больше `N1`. Функция должна вывести значение насколько съедет лента.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "multiplier(2, 6)\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "720\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "def575e9",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "a69833541d04d17ac2e581e3ccd9b3f1",
     "grade": false,
     "grade_id": "cell-83d917308cb16f22",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def multiplier(N1, N2):\n",
    "    list_lent = list(range(N1, N2+1))\n",
    "    sum_1 = 1\n",
    "    for index in range(len(list_lent)):\n",
    "        if list_lent[index] != 0:\n",
    "            sum_1 *= list_lent[index]\n",
    "    return sum_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "c90e2d58",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "5b2aef01b7a1fa3a369336a254ae2669",
     "grade": true,
     "grade_id": "cell-bd35396d79f42d68",
     "locked": true,
     "points": 8,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, техники вас сердечно благодарят!\n"
     ]
    }
   ],
   "source": [
    "assert multiplier(2, 6) == 720\n",
    "assert multiplier(1, 9) == 362880\n",
    "assert multiplier(-3, 3) == -36\n",
    "print('Задача решена, техники вас сердечно благодарят!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2f8881b",
   "metadata": {},
   "source": [
    "## Задание 4 (9 баллов)\n",
    "\n",
    "Через некоторое время в цех наведался технолог. Он оценил масштаб, глубину и инновационность решений техников по оптимизации деятельности. Используя только лексикон литературного русского языка, обогащенный прекрасными стилистическими оборотами, технолог поручил каждому технику работу над новым объектом оптимизации. Убедившись, что каждый техник понял новую задачу технолог приступил к составлению отчета. В отчете нужно указать задачу каждого техника.\n",
    "\n",
    "Реализуйте функцию `assignment()`, которая позволит автоматизировать рутинные действия технолога, а именно:\n",
    "\n",
    "* Функция получает два списка одинаковой длины: `workers` и `hardware`. В первом списке - имена техников, во втором - оборудование с которым они теперь работают.\n",
    "* Функция возвращает список строк вида “`Х` работает с инструментом: `Y`”.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "assignment(['Иванов', 'Петров', 'Сидоров'], \n",
    "       ['напильник', 'бур', 'отвертка'])\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "['Иванов работает с инструментом: напильник', \n",
    "'Петров работает с инструментом: бур', \n",
    "'Сидоров работает с инструментом: отвертка']\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "77f27c27",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "3df067117e0a7983db7ac38ac0ce4082",
     "grade": false,
     "grade_id": "cell-c2ca2c251750b337",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def assignment(workers, hardware):\n",
    "    list_result: list = []\n",
    "    for index, name in enumerate(workers):\n",
    "        hard = hardware[index]\n",
    "        str_name_hard = f\"{name} работает с инструментом: {hard}\"\n",
    "        list_result.append(str_name_hard)\n",
    "    return list_result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "6f5977d6",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "c805d773195f79cbebe9cf7178bdbbf1",
     "grade": true,
     "grade_id": "cell-852c402cfb62365b",
     "locked": true,
     "points": 9,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, технолог с уважением жмет вам руку!\n"
     ]
    }
   ],
   "source": [
    "assert assignment(['Иванов', 'Петров', 'Сидоров'],\n",
    "                  ['напильник', 'бур', 'отвертка']) == ['Иванов работает с инструментом: напильник', \n",
    "                                                        'Петров работает с инструментом: бур', \n",
    "                                                        'Сидоров работает с инструментом: отвертка']\n",
    "assert assignment(['Антонов', 'Семенова', 'Костин', 'Ларионов', 'Федоров'],\n",
    "                  ['компаратор', 'экспликатор', 'диффузор', 'инвертор', 'коллектор']) == ['Антонов работает с инструментом: компаратор', \n",
    "                                                                                          'Семенова работает с инструментом: экспликатор', \n",
    "                                                                                          'Костин работает с инструментом: диффузор', \n",
    "                                                                                          'Ларионов работает с инструментом: инвертор', \n",
    "                                                                                          'Федоров работает с инструментом: коллектор']\n",
    "assert assignment([''], ['']) == [' работает с инструментом: ']\n",
    "print('Задача решена, технолог с уважением жмет вам руку!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20212468",
   "metadata": {},
   "source": [
    "## Задание 5 (8 баллов)\n",
    "\n",
    "Начальнику участка поступил на подпись отчет технолога из предыдущей задачи. Просмотрев отчет по диагонали начальник участка заинтересовался сколько технологов-однофамильцев работает в организации. А заодно и проверить не пытается ли технолог экспроприировать дорогостоящий инструмент. Чтобы отреагировать на запрос начальника участка нужно взять список фамилий техников из отчета, и на основании этого списка нужно вычислить количество фамилий, которые совпадают с другими.\n",
    "\n",
    "Вам нужно реализовать функцию `namesakers()`, которая:\n",
    "* принимает список фамилий техников;\n",
    "* возвращает количество однофамильцев.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "namesakers(['Иванов',\n",
    "            'Петров',\n",
    "            'Сидоров',\n",
    "            'Петров',\n",
    "            'Иванов',\n",
    "            'Петров'])\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "5\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "e9f0cc63",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "671e7243aad55fb3c0d78bebb1bbd409",
     "grade": false,
     "grade_id": "cell-ff7397f559ad605a",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def namesakers(names):\n",
    "    dict_name: dict = {}\n",
    "    count: int = 0\n",
    "    for name in names:\n",
    "        if name in dict_name:\n",
    "            dict_name[name] += 1\n",
    "        else:\n",
    "            dict_name[name] = 1\n",
    "    for name in dict_name:\n",
    "        value = dict_name[name]\n",
    "        if value >= 2:\n",
    "            count+=value\n",
    "    return count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "id": "11c3c61d",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "f8c42921392b9232e8207083715e49f8",
     "grade": true,
     "grade_id": "cell-c122be3142116060",
     "locked": true,
     "points": 8,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, начальник участка почтенно отмечает что без вас бы не справился!\n"
     ]
    }
   ],
   "source": [
    "assert namesakers(['Иванов',\n",
    "                    'Петров',\n",
    "                    'Сидоров',\n",
    "                    'Петров',\n",
    "                    'Иванов',\n",
    "                    'Петров']) == 5\n",
    "assert namesakers(['Иванов',\n",
    "                    'Петров',\n",
    "                    'Сидоров']) == 0\n",
    "assert namesakers(['Иванов',\n",
    "                    'Петров',\n",
    "                    'Сидоров',\n",
    "                    'Петров',\n",
    "                    'Иванов',\n",
    "                    'Петров',\n",
    "                    'Сидоров',\n",
    "                    'Петров',\n",
    "                    'Иванов',\n",
    "                    'Федоров']) == 9\n",
    "print('Задача решена, начальник участка почтенно отмечает что без вас бы не справился!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07a4cde3",
   "metadata": {},
   "source": [
    "## Задание 6 (14 баллов)\n",
    "\n",
    "Тем временем технолог решил восстановить функционирование конвейера и вызвал дорогостоящего инженера. Инженер внимательно изучил модернизации, выполненные в конструкции конвейера. Он все измерил высокоточным штангенциркулем, микрометром, и даже цифровым уклономером. Произведя сложные расчеты инженер сообщил, что достаточно повернуть регулировочный винт на указанное количество оборотов, которое рассчитывается по Дзета-функции Римана:\n",
    "\n",
    "$$ f(n) = \\frac{1}{1^n} + \\frac{1}{2^n} + \\frac{1}{3^n} + ... + \\frac{1}{n^n} $$\n",
    "\n",
    "где `n` - это длина конвейера в метрах.\n",
    "\n",
    "Технолог, вдохновленный профессионализмом инженера, попросил вас написать функцию `dfr()`, которая принимает на вход число `n` - длину конвейера, и выводит рассчитанное значение.\n",
    "\n",
    "Внимание: использовать дополнительные библиотеки и функцию `sum()` запрещается, так как инженер заметил, что они могут вносить искажения в вычислениях.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "dfr(3)\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "1.162037037037037\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "id": "648d0400",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "9f8a520ad41c4b03e9689bdf256e0bd5",
     "grade": false,
     "grade_id": "cell-492a00bbbe2a19b4",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def dfr(n):\n",
    "    my_sum: float = 0\n",
    "    for index in range(1,n+1):\n",
    "        my_sum += 1/(index**n)\n",
    "    return my_sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "id": "2580d880",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "888702ec49226774ad76ed9c94f08a24",
     "grade": true,
     "grade_id": "cell-86af7d9618529787",
     "locked": true,
     "points": 14,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, технолог с уважением жмет вам руку!\n"
     ]
    }
   ],
   "source": [
    "assert dfr(1) == 1.0\n",
    "assert dfr(6) == 1.0173263162079904\n",
    "assert dfr(17) == 1.0000076371976376\n",
    "print('Задача решена, технолог с уважением жмет вам руку!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c25e0ca2",
   "metadata": {},
   "source": [
    "## Задание 7 (16 баллов)\n",
    "\n",
    "После ухода инженера начальник участка получил счет на оплату выполненных работ. Обратив пристальное внимание на спецификацию работ, начальник участка решил проконсультироваться с бухгалтерией, нужно ли выполнять оплату услуг, которые оцениваются более чем в 100 000 р. в отдельном порядке. В бухгалтерии прокомментировали, что это зависит от категории работ, и попросили прислать список этих категорий.\n",
    "\n",
    "Озадаченный начальник участка попросил вас реализовать такую функцию `check()`, которая принимает на вход словарь, ключами которого являются категории (услуги, одежда, обучение, инструменты и т.д.), а значениями - списки с затратами. Функция должна возвращать категории, сумма всех затрат которых превышает 100 000 р., в алфавитном порядке через запятую.\n",
    "\n",
    "Еще в бухгалтерии сказали что к начальнику участка есть частный вопрос, но сначала ждут список категорий работ, превышающих 100 000 р.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "check({'услуги': [4500, 5000, 7000], 'обучение': [76000, 105000], 'одежда': [40000, 66000]})\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "'обучение, одежда'\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "id": "93ca6f7f",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "024085103ac5dfdb0052590cc3fa3850",
     "grade": false,
     "grade_id": "cell-1dd388fac890ea14",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def check(shop_dict):\n",
    "    list_res: list = []\n",
    "    for key in shop_dict:\n",
    "        value: list = shop_dict[key]\n",
    "        if sum(value) > 100_000:\n",
    "            list_res.append(key)\n",
    "    return \", \".join(list_res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "id": "fc2c7a5e",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "f1407c02fab95cb5936e2c1c990236a5",
     "grade": true,
     "grade_id": "cell-e3a2f119064bb631",
     "locked": true,
     "points": 16,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, начальник участка почтенно отмечает что без вас бы не справился!\n"
     ]
    }
   ],
   "source": [
    "assert check({'услуги':[4500, 5000, 7000], 'обучение': [40000, 66000], 'одежда': [76000, 105000]}) == 'обучение, одежда'\n",
    "assert check({'услуги':[4500, 5000, 7000], 'обучение': [4000, 66000], 'одежда': [76000, 105000]}) == 'одежда'\n",
    "assert check({'услуги':[4500, 5000, 7000], 'обучение': [4000, 6600], 'одежда': [7600, 10500]}) == ''\n",
    "print('Задача решена, начальник участка почтенно отмечает что без вас бы не справился!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b49f54a",
   "metadata": {},
   "source": [
    "## Задание 8 (16 баллов)\n",
    "\n",
    "Успешно справившись с предыдущей задачей начальник участка спросил что за частный вопрос был к нему в бухгалтерии. На что получил ответ, что нормативно работа инженера была оценена чуть выше оплаченной. Чтобы не нарушать законодательство разницу перенесли на специальный счет, из которого, например, можно выписать премии на дни рождения сотрудникам участка. Начальнику участка эта мысль пришлась по душе и он попросил технолога составить календарь дней рождения сотрудников цеха. Технологу задача тоже понравилась и он решил внести технологические усовершенствования - добавить фильтр, чтобы получать список именинников за выбранный месяц. С этой просьбой он и пришел к вам.\n",
    "Реализуйте календарь дней рождений. По списку всех дней рождения определите, у кого день рождения в заданном месяце.\n",
    "\n",
    "Напишите функцию `birthday_list()`, в которую передается список дней рождения и месяцы. Функция возвращает список всех, кто родился в указанный месяц в порядке дня рождения.\n",
    "\n",
    "Функция получает информацию об их днях рождения. Каждая строчка состоит из трёх частей, разделённых пробелом — фамилии, дня и месяца его рождения. Имя — это строка из русских букв, день — число от 1 до 31, а месяц — строка из набора «янв», «фев», «мар», «апр», «май», «июн», «июл», «авг», «сен», «окт», «ноя», «дек».\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "birthday_list(['Котов 20 янв',\n",
    "            'Семенов 15 июн', \n",
    "            'Алексеев 10 янв',\n",
    "            'Иванов 20 июл'], \n",
    "           'янв')\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "['Алексеев',\n",
    "'Котов']\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "id": "f9a6cd04",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "a1adf9bcd2cebe10a7b68cf1da64a836",
     "grade": false,
     "grade_id": "cell-a0cf7c23344330fb",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def birthday_list(bdays, mon):\n",
    "    persons: list = []\n",
    "    for str_person in bdays:\n",
    "        rez = str_person.split(\" \")\n",
    "        if rez[2] == mon:\n",
    "            persons.append(rez[1]+ \" \"+rez[0])\n",
    "    persons.sort()\n",
    "    new_persons: list = []\n",
    "    for person in persons:\n",
    "        new_persons.append(person.split(\" \")[1])\n",
    "    return new_persons"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "id": "94eeee97",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "94b2ab12296b11db81517c1bf2fa621f",
     "grade": true,
     "grade_id": "cell-7af865ddb9c4d567",
     "locked": true,
     "points": 16,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, начальник участка почтенно отмечает что без вас бы не справился!\n"
     ]
    }
   ],
   "source": [
    "assert birthday_list(['Котов 20 янв',\n",
    "                      'Семенов 15 июн',\n",
    "                      'Алексеев 10 янв',\n",
    "                      'Иванов 20 июл'], \n",
    "                     'янв') == ['Алексеев', 'Котов']\n",
    "assert birthday_list(['Котов 20 янв',\n",
    "                      'Семенов 15 июл',\n",
    "                      'Алексеев 10 янв',\n",
    "                      'Иванов 20 июл',\n",
    "                      'Фролов 16 июл',\n",
    "                      'Ларионов 18 фев',\n",
    "                      'Спицын 7 сен',\n",
    "                      'Федоров 30 дек'], \n",
    "                     'июл') == ['Семенов', 'Фролов', 'Иванов']\n",
    "assert birthday_list(['Котов 20 янв',\n",
    "                      'Семенов 15 июн',\n",
    "                      'Алексеев 10 янв',\n",
    "                      'Иванов 20 июл'], \n",
    "                     'ноя') == []\n",
    "print('Задача решена, начальник участка почтенно отмечает что без вас бы не справился!')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65e53b88",
   "metadata": {},
   "source": [
    "## Задание 9 (14 баллов)\n",
    "\n",
    "Получив премию в честь дней рождения, техники, которые после работы инженера, по большей части бездействовали, воодушевились и придумали игру, чтобы как-то коротать свободное время. Игра, в отличие от инновационных решений, оказалась гораздо проще: каждый техник называет слово, из всех названных слов выбираются самое длинное и самое короткое (предполагается, что все слова имеют разную длину) и проверяется, есть ли все буквы короткого слова в длинном, при этом количество повторений букв не учитывается. \n",
    "\n",
    "Создайте функцию `compare()`, которая выводит «ДА», если условие выполняется или «НЕТ» в противном случае.\n",
    "\n",
    "Выигрывает тот, кто сумел назвать самое длинное слово, которое включает все буквы самого короткого слова.\n",
    "\n",
    "**Пример ввода:**\n",
    "```python\n",
    "compare('грот вигвам гаррота')\n",
    "```\n",
    "**Пример вывода:**\n",
    "```python\n",
    "'ДА'\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "id": "a05b5c5d",
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "b0d40b17d5aeea33262413e47bfc4f2f",
     "grade": false,
     "grade_id": "cell-d13fd53bf7edec0d",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def compare(sentence):\n",
    "    list_len_word: list = []\n",
    "    list_words: list = sentence.split(\" \")\n",
    "    my_min = 10000\n",
    "    my_max = 0\n",
    "    my_min_word = \"\"\n",
    "    my_max_word = \"\"\n",
    "    flag_bool:str = \"ДА\"\n",
    "    for word in list_words:\n",
    "        if len(word)<my_min:\n",
    "            my_min = len(word) \n",
    "            my_min_word = word\n",
    "        if len(word)>my_max:\n",
    "            my_max = len(word) \n",
    "            my_max_word = word\n",
    "    for char in my_min_word:\n",
    "        if not (char in my_max_word):\n",
    "            flag_bool = \"НЕТ\"\n",
    "    return flag_bool\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "f2c802f8",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "a3780ff3b64cc90622d6500a4be561bb",
     "grade": true,
     "grade_id": "cell-31cd2c0343f5ab89",
     "locked": true,
     "points": 14,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Задача решена, техники вас сердечно благодарят!\n"
     ]
    }
   ],
   "source": [
    "assert compare('грот вигвам гаррота') == 'ДА'\n",
    "assert compare('чаепитие чашка печенье') == 'НЕТ'\n",
    "assert compare('чечевица светопреставление престол') == 'ДА'\n",
    "print('Задача решена, техники вас сердечно благодарят!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "17b3fbb9",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
